﻿using System;
using System.Collections;
using System.IO;
using System.Web;
using iTextSharp.text.pdf;
using iTextSharp.text;
using iTextSharp.text.exceptions;


/// <summary>
/// Descripción breve de PDFExport
/// </summary>
public class PDFExport
{

    /// <summary>
    /// Metodo que sirve para crear un listado de los profesores que no checaron la asistencia de los alumnos
    /// 
    /// </summary>
    /// <param name="titulo">Ttulo del reporte</param>
    /// <param name="datos">lista de los datos que seran mostrados en el documento</param>
    public void crearListaInasistencia(string titulo,string nombreArchivo, string rutaArchivo,string rutaServ, ArrayList datos) {
        
        int numCampos = datos.Count; //cuenta la cantidad de elementos
        Document doc = new Document();
        
        PdfWriter.GetInstance(doc,new FileStream(rutaArchivo+"/"+nombreArchivo+".pdf",FileMode.Create,FileAccess.Write));
        
        //FORMATO DE LOS ELEMENTOS DEL REPORTE....
        Chunk TITULO = new Chunk(titulo + "\n\n", FontFactory.GetFont("Arial", 10, iTextSharp.text.Font.BOLD));
        //NOMBRE DE LA CARRERA
        Chunk CARRERA = new Chunk("CARRERA  INGENIERÍA EN TECNOLOGÍAS DE LA INFORMACIÓN  \n\n", FontFactory.GetFont("Arial", 10, iTextSharp.text.Font.BOLD));

        //formato de fecha...
        Chunk fecha = new Chunk(DateTime.Now.ToLongDateString()+"\n\n", FontFactory.GetFont("Arial", 10, iTextSharp.text.Font.ITALIC));
        
        //poner imagen de Uth en el reporte
        Image gif = Image.GetInstance(rutaServ + "/uth.png"); //logo de la Uth

        gif.ScalePercent(24f);
        gif.Alignment = Image.ALIGN_RIGHT;
        //fin de poner imagen

        #region

        //tabla encabezado
        PdfPTable tablaEncabezado = new PdfPTable(5);
        tablaEncabezado.TotalWidth = 216f;//ancho de La tabla
        tablaEncabezado.LockedWidth = false;//bloqueo de la tabla
        tablaEncabezado.SpacingBefore = 1f;
        tablaEncabezado.SpacingAfter = 1f;
        
        float[] columnasEncabezado = { 30f, 230f, 60f, 50f, 230f }; //ancho de las columnas
        tablaEncabezado.SetWidthPercentage(columnasEncabezado, PageSize.LETTER_LANDSCAPE); //formao de colmnas

        //añadir celdas a la tabla del encabezado
        PdfPCell cel1 = new PdfPCell(new Phrase("No.", FontFactory.GetFont("ARIAL",10)));
        PdfPCell cel2 = new PdfPCell(new Phrase("Nombre del profesor", FontFactory.GetFont("ARIAL",10)));
        PdfPCell cel3 = new PdfPCell(new Phrase("Grupo",FontFactory.GetFont("ARIAL",10)));
        PdfPCell cel4 = new PdfPCell(new Phrase("Hora",FontFactory.GetFont("ARIAL",10)));
        PdfPCell cel5 = new PdfPCell(new Phrase("Asignatura",FontFactory.GetFont("ARIAL",10)));

        //cell.Colspan = 5;
        //cell.HorizontalAlignment= 1;
        cel1.BackgroundColor = BaseColor.GREEN;
        cel1.BorderColor = BaseColor.ORANGE;
        tablaEncabezado.AddCell(cel1);
        cel2.BackgroundColor = BaseColor.GREEN;
        cel2.BorderColor = BaseColor.ORANGE;
        tablaEncabezado.AddCell(cel2);
        cel3.BackgroundColor = BaseColor.GREEN;
        cel3.BorderColor = BaseColor.ORANGE;
        tablaEncabezado.AddCell(cel3);
        cel4.BackgroundColor = BaseColor.GREEN;
        cel4.BorderColor = BaseColor.ORANGE;
        tablaEncabezado.AddCell(cel4);
        cel5.BackgroundColor = BaseColor.GREEN;
        cel5.BorderColor = BaseColor.ORANGE;
        tablaEncabezado.AddCell(cel5);
        #endregion



        #region 
        //crear una tabla contenedora
        PdfPTable table = new PdfPTable(5);//numero de columnas
        
        RepProfesor rp = null;

        table.TotalWidth = 216f;//ancho de La tabla
        table.LockedWidth = false;//bloqueo de la tabla
        table.SpacingBefore = 1f;
        table.SpacingAfter = 1f;
        //table.SetWidthPercentage({70, 330, 50, 100}, PageSize.A4); //Ajusta el tamaño de cada columna
        float[] columnas = { 30f, 230f, 60f,50f,230f }; //ancho de las columnas
        table.SetWidthPercentage(columnas, PageSize.LETTER_LANDSCAPE); //formao de colmnas

        int contador = 1;
        for (int i = 0; i < datos.Count; i++) {

            rp = (RepProfesor)datos[i];
            //PdfPCell cell1 = new PdfPCell(new Phrase(contador.ToString() + "\t" + rp.Profesor + "\t" + rp.Grupo + "\t" + rp.Hora + "\t" + rp.Asignatura));
            PdfPCell cell1 = new PdfPCell(new Phrase(contador.ToString(),FontFactory.GetFont("ARIAL",10)));
            PdfPCell cell2 = new PdfPCell(new Phrase(rp.Profesor, FontFactory.GetFont("ARIAL", 10)));
            PdfPCell cell3 = new PdfPCell(new Phrase(rp.Grupo, FontFactory.GetFont("ARIAL", 10)));
            PdfPCell cell4 = new PdfPCell(new Phrase(horaClases(rp.Hora) , FontFactory.GetFont("ARIAL", 10)));
            PdfPCell cell5 = new PdfPCell(new Phrase(rp.Asignatura, FontFactory.GetFont("ARIAL", 10)));
            //#FFFFCC
            
            cell1.Border = 1;
            cell1.BackgroundColor = iTextSharp.text.BaseColor.GREEN;
            cell1.BorderColor = iTextSharp.text.BaseColor.ORANGE;

            table.AddCell(cell1);
            table.AddCell(cell2);
            table.AddCell(cell3);
            table.AddCell(cell4);
            table.AddCell(cell5);
            contador++;
        }
        #endregion
        //fin crear tabla

        try
        {
            doc.Open();
            doc.Add(gif);
            doc.Add(CARRERA);
            doc.Add(new Paragraph(TITULO));//representa el titulo con que se reconocera el documento
            doc.Add(new Paragraph(fecha));

            doc.Add(tablaEncabezado);

            doc.Add(table);
            
            doc.Close();


        }

        catch (Exception ex)
        {
            Console.WriteLine("ERROR EN PDF-------------------------------------------"+ex.Message);
        }
    }


    /// <summary>
    /// regresa la hora en forma de texto
    /// </summary>
    /// <param name="hr"></param>
    /// <returns></returns>
    public static string horaClases(int hr) {
        string hora = "";
        switch (hr) { 
            case 1:
                hora = "7:00";
                break;
            case 2:
                hora = "8:00";
                break;
            case 3:
                hora = "9:00";
                break;
            case 4:
                hora = "10:00";
                break;
            case 5:
                hora = "11:00";
                break;
            case 6:
                hora = "12:00";
                break;
            case 7:
                hora = "13:00";
                break;
            case 8:
                hora = "14:00";
                break;
            case 9:
                hora = "15:00";
                break;
            case 10:
                hora = "16:00";
                break;
            
            case 11:
                hora = "17:00";
                break;
            case 12:
                hora = "18:00";
                break;
            case 13:
                hora = "19:00";
                break;
            case 14:
                hora = "20:00";
                break;
        }
        return hora;
    }
}